package design;

/**
 * 设计模式-单例模式
 * 饿汉模式：类加载的时候，就进行创建对象，系统开销比较大，但不存在线程安全问题
 * 懒汉模式：在使用的时候才真正创建单例对象，但是存在线程安全问题
 * 静态内部类单例：兼具懒汉模式和饿汉模式的有点
 *
 */

// 懒汉模式
public class Singleton2 {
    private static Singleton2 singleton1 = null;

    private Singleton2() {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    public synchronized static Singleton2 getInstance(){
        if(null == singleton1){
            try {
                Thread.sleep(1000);
                System.out.println(" 构建对象可能耗时很长 " );
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            singleton1 = new Singleton2();
        }
        return singleton1;
    }

    @Override
    public String toString() {
        return "design.Singleton1{}" + this.hashCode();
    }
}
